﻿using Excel.Model;
using NPOI.HPSF;
using NPOI.HSSF.UserModel;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing; // 需要引用 System.Drawing.Common

namespace Excel
{
    public class ExcelRun
    {
        /// <summary>
        /// excel 数据导入数据库
        /// </summary>
        public static void Run()
        {
            try
            {
                string[] strings = [];
                ISheet sheet = null;
                string filePath = "D:/学习/长沙理工毕业设计/Power_Bi/xws.xlsx";
                FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                IWorkbook workbook = null;
                if (filePath.IndexOf(".xlsx") > 0) // 2007版本
                {
                    workbook = new XSSFWorkbook(fs);
                }
                else if (filePath.IndexOf(".xls") > 0) // 2003版本
                {
                    workbook = new HSSFWorkbook(fs);
                }
                sheet = workbook.GetSheet("KPI REVIEW");//根据给定的sheet名称获取数据

                // 获取工作表的最后一行索引（基于0的索引）
                int lastRowNum = sheet.LastRowNum;
                //统计比对数据
                List<PveDuiZhao> pveDuiZhaos = new List<PveDuiZhao>();
                PveDuiZhao pveDuiZhao = new PveDuiZhao();
                pveDuiZhao.sub_Classes = new List<sub_class>();
                IRow currentRow = sheet.GetRow(21);
                ICell cell = currentRow.GetCell(4);
                ICellStyle style = cell.CellStyle;
                // 获取背景颜色
                var fillForegroundColor = style.FillForegroundColorColor;
                // 输出背景颜色
                Console.WriteLine($"单元格({21}, {4}) 背景颜色: ");
                //for (int rowIndex = 3; rowIndex <= lastRowNum; rowIndex++)
                //{
                //    IRow row = sheet.GetRow(rowIndex);
                //    if (row == null) continue;
                //    // 遍历所有单元格
                //    for (int cellIndex = 0; cellIndex < 1; cellIndex++)
                //    {
                //        ICell cell = row.GetCell(cellIndex);
                //        if (cell == null)
                //        {
                //            Console.Write("\t[EMPTY]");
                //            continue;
                //        }
                //        // 根据单元格类型处理数据
                //        switch (cell.CellType)
                //        {
                //            case CellType.String:
                //                string name = cell.StringCellValue;
                //                //Console.Write($"\t\"{cell.StringCellValue}\"");
                //                // 获取单元格的样式
                //                ICellStyle cellStyle = cell.CellStyle;
                //                // 获取字体（注意字体对象是可能共享的）
                //                IFont font = workbook.GetFontAt(cellStyle.FontIndex);
                //                // 输出字体大小
                //                double fontSize = font.FontHeightInPoints;
                //                if (fontSize == 14)
                //                {
                //                    pveDuiZhao = new PveDuiZhao();
                //                    pveDuiZhao.sub_Classes = new List<sub_class>();
                //                    pveDuiZhao.Rows = rowIndex;
                //                    pveDuiZhao.main_class = name;
                //                    pveDuiZhaos.Add(pveDuiZhao);
                //                }
                //                if (name.Trim().StartsWith("Total") || name.Trim() == "...")
                //                    continue;
                //                if (fontSize != 14 && name != null && name != "")
                //                {
                //                    sub_class sub_Class = new sub_class();
                //                    sub_Class.rows = rowIndex;
                //                    sub_Class.sub_className = name;
                //                    pveDuiZhao.sub_Classes.Add(sub_Class);
                //                }
                //                break;
                //            default:
                //                Console.Write($"\tUnknown type: {cell.CellType}");
                //                break;
                //        }
                //    }
                //}
                //int sheetCount = workbook.NumberOfSheets;
                //for (int i = 0; i < sheetCount; i++)
                //{
                //    // 获取工作表对象
                //    sheet = workbook.GetSheetAt(i);
                //    if (sheet.SheetName == "PVE_Actual")
                //    {
                //        // 获取工作表的最后一行索引（基于0的索引）
                //        lastRowNum = sheet.LastRowNum;
                //        // 遍历所有行
                //        string title = "";
                //        for (int rowIndex = 3; rowIndex <= lastRowNum; rowIndex++)
                //        {
                //            IRow row = sheet.GetRow(rowIndex);
                //            if (row == null)
                //                continue; // 跳过空行（虽然通常不应该发生，但以防万一）

                //            // 遍历所有单元格
                //            //一级对象
                //            T_Opex_pve_analysis t_Opex_Pve_Analysis = new T_Opex_pve_analysis();
                //            bool bl = false;
                //            t_Opex_Pve_Analysis.main_class = title;
                //            for (int cellIndex = 0; cellIndex < row.LastCellNum; cellIndex++)
                //            {

                //                ICell cell = row.GetCell(cellIndex);
                //                if (cell == null)
                //                {
                //                    Console.Write("\t[EMPTY]");
                //                    continue;
                //                }
                //                bool xw = false;
                //                // 根据单元格类型处理数据
                //                if (cellIndex > 4)
                //                {
                //                    int month = 0;
                //                    switch (cellIndex)
                //                    {
                //                        case 5:
                //                            month = 1;
                //                            break;
                //                        case 6:
                //                            month = 2;
                //                            break;
                //                        case 7:
                //                            month = 3;
                //                            break;
                //                        case 8:
                //                            month = 4;
                //                            // 如果需要公式的结果，可以使用 Evaluate 方法，但这通常更复杂
                //                            break;
                //                        case 9:
                //                            month = 5;
                //                            break;
                //                        case 10:
                //                            month = 6;
                //                            break;
                //                        case 11:
                //                            month = 7;
                //                            break;
                //                        case 12:
                //                            month = 8;
                //                            break;
                //                        case 13:
                //                            month = 9;
                //                            break;
                //                        case 14:
                //                            month = 10;
                //                            break;
                //                        case 15:
                //                            month = 11;
                //                            break;
                //                        case 16:
                //                            month = 12;
                //                            break;
                //                        default:
                //                            month = 0;
                //                            break;
                //                    }
                //                    switch (cell.CellType)
                //                    {
                //                        case CellType.String: 
                                            
                //                            break;
                //                        case CellType.Numeric:
                //                            if (DateUtil.IsCellDateFormatted(cell))
                //                            {
                //                                Console.Write($"\t{cell.DateCellValue}");
                //                            }
                //                            else
                //                            {
                //                                Console.Write($"\t{cell.NumericCellValue}");
                //                            }
                //                            break;
                //                        case CellType.Boolean:
                //                            Console.Write($"\t{cell.BooleanCellValue}");
                //                            break;
                //                        case CellType.Formula:
                //                            Console.Write($"\tFormula: {cell.CellFormula}");
                //                            // 如果需要公式的结果，可以使用 Evaluate 方法，但这通常更复杂
                //                            break;
                //                        case CellType.Blank:
                //                            //Console.Write("\t[BLANK]");

                //                            break;
                //                        case CellType.Error:
                //                            Console.Write($"\tError: {cell.ErrorCellValue}");
                //                            break;
                //                        default:
                //                            Console.Write($"\tUnknown type: {cell.CellType}");
                //                            break;
                //                    }

                //                }
                //                else if (cellIndex < 4)
                //                {
                //                    string xx = "";
                //                    switch (cell.CellType)
                //                    {

                //                        case CellType.String:
                //                            string name = cell.StringCellValue;
                //                            //Console.Write($"\t\"{cell.StringCellValue}\"");
                //                            // 获取单元格的样式
                //                            ICellStyle cellStyle = cell.CellStyle;
                //                            // 获取字体（注意字体对象是可能共享的）
                //                            IFont font = workbook.GetFontAt(cellStyle.FontIndex);
                //                            // 输出字体大小
                //                            double fontSize = font.FontHeightInPoints;
                //                            if (cellIndex == 0)
                //                            {
                //                                if (fontSize == 14)
                //                                {
                //                                    title = name;
                //                                    xw = true;
                //                                    break;
                //                                }
                //                                if (name.Trim().StartsWith("Total") || name.Trim() == "...")
                //                                {
                //                                    xw = true;
                //                                    break;
                //                                }
                //                                if (name == null || name.Trim() == "")
                //                                {
                //                                    xw = true;
                //                                    break;
                //                                }
                //                                t_Opex_Pve_Analysis.sub_class = name;
                //                            }
                //                            else
                //                            {
                //                                xx = name == null? "" : name;
                //                            }

                //                            break;
                //                        case CellType.Numeric:
                //                            if (DateUtil.IsCellDateFormatted(cell))
                //                            {
                //                                Console.Write($"\t{cell.DateCellValue}");
                //                            }
                //                            else
                //                            {
                //                                Console.Write($"\t{cell.NumericCellValue}");
                //                            }
                //                            break;
                //                        case CellType.Boolean:
                //                            Console.Write($"\t{cell.BooleanCellValue}");
                //                            break;
                //                        case CellType.Formula:
                //                            Console.Write($"\tFormula: {cell.CellFormula}");
                //                            // 如果需要公式的结果，可以使用 Evaluate 方法，但这通常更复杂
                //                            break;
                //                        case CellType.Blank:
                //                            //Console.Write("\t[BLANK]");
                //                            xx = "";
                //                            break;
                //                        case CellType.Error:
                //                            Console.Write($"\tError: {cell.ErrorCellValue}");
                //                            break;
                //                        default:
                //                            Console.Write($"\tUnknown type: {cell.CellType}");
                //                            break;
                //                    }
                //                    if (xw == true)
                //                        break;
                //                    if (cellIndex == 1)
                //                    {
                //                        t_Opex_Pve_Analysis.cost_center = xx;
                //                    }
                //                    else if (cellIndex == 2)
                //                    {
                //                        t_Opex_Pve_Analysis.undefined = xx;
                //                    }
                //                    else if (cellIndex == 3)
                //                    {
                //                        t_Opex_Pve_Analysis.unit = xx;
                //                    }
                //                }
                //            }
                //            Console.WriteLine(); // 换行以开始新的一行输出
                //        }
                //        Console.WriteLine(); // 在每个工作表之后添加一个空行以分隔
                //    }
                //}
            }
            catch (Exception ex)
            {

            }
        }

        /// <summary>
        /// 数据比对值
        /// </summary>
        public static void Name(T_Opex_pve_analysis t_Opex_Pve_Analysis, decimal dec, int cels)
        {

        }
    }
}
